package utils

// MapContainsKey 判断 map[any]any 是否包含指定的 key
func MapContainsKey[K comparable, V any](m map[K]V, key K) bool {
	if m == nil {
		return false
	}
	_, exists := m[key]
	return exists
}

// MapContainsValue 检查map是否包含指定值 (泛型版本)
// 要求值类型必须是可比较的(comparable)
func MapContainsValue[K comparable, V comparable](m map[K]V, value V) bool {
	if len(m) == 0 {
		return false
	}

	for _, v := range m {
		if v == value {
			return true
		}
	}
	return false
}

// MapContainsValueFunc 检查 map 是否包含指定值，使用自定义比较函数
//
// 参数
//
//	m: 要搜索的 map
//	value: 要查找的目标值
//	eq: 自定义比较函数，应返回 true 表示匹配
//
// 返回值：
//
//	如果找到匹配的值返回 true，否则返回 false
//
// 示例：
//
//	type User struct { ID int; Name string }
//
//	users := map[int]User{
//	    1: {ID: 1, Name: "Alice"},
//	    2: {ID: 2, Name: "Bob"},
//	}
//
//	// 按 Name 字段查找
//	contains := MapContainsValueFunc(users, User{Name: "Alice"},
//	    func(a, b User) bool { return a.Name == b.Name })
//	fmt.Println(contains) // 输出: true
//
//	// 按 ID 字段查找
//	contains = MapContainsValueFunc(users, User{ID: 2},
//	    func(a, b User) bool { return a.ID == b.ID })
//	fmt.Println(contains) // 输出: true
func MapContainsValueFunc[K comparable, V any](
	m map[K]V,
	value V,
	eq func(a, b V) bool,
) bool {
	if len(m) == 0 {
		return false
	}
	for _, v := range m {
		if eq(v, value) {
			return true
		}
	}
	return false
}
